package org.jypj.dev.service.impl;


import java.util.*;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.jypj.dev.model.User;
import org.jypj.dev.dao.IUserDao;
import org.jypj.dev.service.IUserService;
import org.jypj.dev.util.Page;

@Service("userService")
public class UserServiceImpl implements IUserService {

    @Resource
    private IUserDao userDao;

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param user
     * @return 保存后的对象包括ID
     */
    public int saveUser(User user) {
        user.setId(user.getUserNum());
        return userDao.saveUser(user);
    }

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteUserById(String id) {

        return userDao.deleteUserById(id);
    }

    /**
     * 根据对象删除
     *
     * @param id 主键ID
     * @return
     */
    public int deleteUserByObject(User user) {

        return userDao.deleteUserByObject(user);
    }

    /**
     * 更新
     * 只更新值不为空的字段
     *
     * @param user
     * @return 保存后的对象包括ID
     */
    public int updateUserByField(User user) {

        return userDao.updateUserByField(user);
    }

    /**
     * 更新
     * 更新所有字段
     *
     * @param user
     * @return 保存后的对象包括ID
     */
    public int updateUser(User user) {

        return userDao.updateUser(user);
    }

    /**
     * 按ID查询
     *
     * @return User
     * @parm id 主键ID
     */
    public User selectUserById(String id) {

        return userDao.selectUserById(id);
    }

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<User>
     */
    public Page selectOnePageByMap(Page page, Map<String, Object> map) {
        List<User> users = userDao.selectOnePageByMap(page, map);
        if (users != null && users.size() > 0) {
            page.setResult(users);
        } else {
            page.setResult(new ArrayList<User>());
        }
        return page;
    }

    /**
     * 分页查询 包含对象条件
     *
     * @param page 分页对象
     * @param user 查询条件
     * @return Page
     */
    public Page selectOnePageByUser(Page page, User user) {
        List<User> users = userDao.selectOnePageByUser(page, user);
        if (users != null && users.size() > 0) {
            page.setResult(users);
        } else {
            page.setResult(new ArrayList<User>());
        }
        return page;
    }

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<User>
     */
    public List<User> selectAllByMap(Map<String, Object> map) {
        return userDao.selectAllByMap(map);
    }


    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<User>
     */
    public List<User> selectAllByUser(User user) {

        return userDao.selectAllByUser(user);
    }

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return User
     */
    public User selectObjectByMap(Map<String, Object> map) {

        return userDao.selectObjectByMap(map);
    }

    /**
     * 按条件查询单个对象
     *
     * @return User
     */
    public User selectObjectByUser(User user) {

        return userDao.selectObjectByUser(user);
    }

    @Override
    public User selectUserByUserNum(String userNum) {
        Map<String, Object> map = new HashMap<>();
        map.put("userNum", userNum);
        User user = userDao.selectObjectByMap(map);
        return user;
    }
}